package com.yangchuang.openpicture.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 用户统计表实体类
 * 
 * 该表存储用户的统计数据，包括粉丝数、获赞数、收藏数、作品数等。
 * 数据通过Redis缓存，定期同步到MySQL数据库。
 * 
 * @author naiyi
 * @version 1.0
 * @since 2025-09-01
 */
@Data
@AllArgsConstructor
@TableName("user_statistics")
public class UserStatistics implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID（关联user表）
     */
    @TableId(value = "user_id")
    private Long userId;

    /**
     * 粉丝数量（别人关注自己）
     */
    @TableField("get_fans_count")
    private Long followers;

    /**
     * 总被点赞数
     */
    @TableField("get_total_likes")
    private Long likesReceived;

    /**
     * 总被收藏数量
     */
    @TableField("get_total_favorites")
    private Long collections;

    /**
     * 总被浏览量
     */
    @TableField("get_total_views")
    private Long views;

    /**
     * 被别人下载总数
     */
    @TableField("get_total_downloads")
    private Long downloads;

    /**
     * 自己关注别人的数量
     */
    @TableField("own_following_count")
    private Long following;

    /**
     * 自己收藏数量
     */
    @TableField("own_favorites_count")
    private Long favorites;

    /**
     * 自己下载数量
     */
    @TableField("own_downloads_count")
    private Long downloadsCount;

    /**
     * 自己浏览量
     */
    @TableField("own_views_count")
    private Long viewsCount;

    /**
     * 自己评论量
     */
    @TableField("own_comments_count")
    private Long comments;

    /**
     * 自己喜欢的作品数
     */
    @TableField("own_likes_count")
    private Long likesGiven;

    /**
     * 自己的总作品数
     */
    @TableField("own_total_works_count")
    private Long works;

    /**
     * 自己创建的收藏夹数量
     */
    @TableField("own_collections_created_count")
    private Long collectionsCreated;

    /**
     * 被举报次数
     */
    @TableField("get_reports_received_count")
    private Long reportsReceived;

    /**
     * 举报他人次数
     */
    @TableField("own_reports_made_count")
    private Long reportsMade;

    /**
     * 自己分享数量
     */
    @TableField("own_shares_count")
    private Long shares;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private LocalDateTime updateTime;

    /**
     * 逻辑删除：0-正常，1-删除
     */
    @TableField(value = "is_deleted")
    @TableLogic(value = "0", delval = "1")
    private Integer isDeleted;
}